﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ext.Net;
using System.Xml.Xsl;
using System.Xml;

public partial class Views_LocationProvinces : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            GridPanelProvince_DataLoad();
        }
    }

    private void GridPanelProvince_DataLoad()
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                StoreProvince.DataSource = db.Provinces.ToList<Province>();
                StoreProvince.DataBind();

                GridPanelProvince.ActiveIndex = -1;
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void StoreProvince_ReadData(object sender, Ext.Net.StoreReadDataEventArgs e)
    {
        GridPanelProvince_DataLoad();
    }

    protected void RowSelect(object sender, DirectEventArgs e)
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = GridPanelProvince.SelectionModel.Primary as RowSelectionModel;
                if (rsm.SelectedRow == null)
                {
                    lblWDUpdateProMes.Text = "";
                    txtWDUpdateProName.Text = "";
                    txtWDUpdateNewProname.Text = "";
                    btnUpdateProv.Disabled = true;
                    return;
                }

                int provID = Int32.Parse(rsm.SelectedRow.RecordID);
                Province prov = db.Provinces.Single(p => p.ProvID == provID);

                lblViewProName.Text = prov.NameOfProvince;
                checkViewProStatus.Checked = Boolean.Parse(prov.StatusOfProvince.ToString());
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void btnAdd_DirectClick(object sender, DirectEventArgs e)
    {
        ResetControls_WindowAdd();
        this.windowAdd.Show();

    }

    protected void btnWdAddPro_DirectClick(object sender, Ext.Net.DirectEventArgs e)
    {
        try
        {
            string provinName = txtProname.Text.Trim();

            if (provinName.Equals(""))
            {
                lblwdAddProMes.Text = "Tên tỉnh thành không được để trống";
                txtProname.Focus(true, 100);
                return;
            }
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                foreach (var item in db.Provinces)
                {
                    if (provinName.ToLower().Equals(item.NameOfProvince.ToLower()))
                    {
                        lblwdAddProMes.Text = "Tên tỉnh thành đã có, hãy nhập tên khác";
                        txtProname.Focus(true, 100);
                        return;
                    }
                }

                Province province = new Province()
                {
                    NameOfProvince = provinName,
                    StatusOfProvince = cbxWdAddStatus.Checked
                };

                db.Provinces.Add(province);
                db.SaveChanges();

                ResetControls_WindowAdd();
                GridPanelProvince_DataLoad();
                windowAdd.Hidden = true;
                X.Msg.Alert("Thông báo", String.Format("Thêm mới thành công tỉnh thành [ {0} ]", province.NameOfProvince)).Show();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void btnWdCancelPro_DirectClick(object sender, DirectEventArgs e)
    {
        windowAdd.Hidden = true;
        windowAdd.Dispose();
    }

    protected void btnEdit_DirectClick(object sender, DirectEventArgs e)
    {
        try
        {
            RowSelectionModel rsm = GridPanelProvince.SelectionModel.Primary as RowSelectionModel;
            if (rsm.SelectedRow == null)
            {
                X.Msg.Alert("Thông báo", "Bạn chưa chọn tỉnh thành để cập nhật").Show();
                return;
            }

            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                int provID = Int32.Parse(rsm.SelectedRow.RecordID);
                Province prov = db.Provinces.Single(p => p.ProvID == provID);

                WindowUpdateProv.Hidden = false;

                lblWDUpdateProMes.Text = "";
                txtWDUpdateProName.Text = prov.NameOfProvince;
                txtWDUpdateNewProname.Text = "";
                checkWDUpdateStatus.Checked = Boolean.Parse(prov.StatusOfProvince.ToString());
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void btnUpdateProv_DirectClick(object sender, DirectEventArgs e)
    {
        if (txtWDUpdateNewProname.Text.Length == 0)
        {
            lblWDUpdateProMes.Text = "Tên tỉnh thành không được để trống.";
            txtWDUpdateNewProname.Focus(true, 0);
            return;
        }
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                string newProName = txtWDUpdateNewProname.Text.ToString();

                foreach (var provinece in db.Provinces)
                {
                    string pronameItem = provinece.NameOfProvince.ToLower();
                    if (pronameItem.Equals(newProName.ToLower()) && !pronameItem.Equals(txtWDUpdateProName.Text.ToLower()))
                    {
                        lblWDUpdateProMes.Text = "Tên tỉnh thành đã tồn tại, hãy nhập tên khác.";
                        txtWDUpdateNewProname.Focus(true, 0);
                        return;
                    }
                }
                RowSelectionModel rsm = GridPanelProvince.SelectionModel.Primary as RowSelectionModel;

                int provID = Int32.Parse(rsm.SelectedRow.RecordID);
                Province prov = db.Provinces.Single(p => p.ProvID == provID);

                prov.NameOfProvince = txtWDUpdateNewProname.Text.Trim();
                prov.StatusOfProvince = Boolean.Parse(checkWDUpdateStatus.Checked.ToString());

                db.SaveChanges();

                WindowUpdateProv.Hidden = true;
                GridPanelProvince_DataLoad();
                ResetControls_FormViewInfor();

                X.Msg.Alert("Thông báo", "Cập nhật thông tin thành công").Show();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void btnCancelWDUpdateProv_DirectClick(object sender, DirectEventArgs e)
    {
        WindowUpdateProv.Hidden = true;
        WindowUpdateProv.Disable();
    }

    protected void btnDelete_DirectClick(object sender, DirectEventArgs e)
    {
        try
        {
            RowSelectionModel rsm = GridPanelProvince.SelectionModel.Primary as RowSelectionModel;
            if (rsm.SelectedRow == null)
            {
                X.Msg.Alert("Thông báo", "Bạn chưa chọn tỉnh thành để xóa bỏ").Show();
                return;
            }

            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                int provID = Int32.Parse(rsm.SelectedRow.RecordID);
                Province prov = db.Provinces.Single(p => p.ProvID == provID);

                X.Msg.Confirm("Thông báo hệ thống", String.Format("Bạn có muốn xóa tỉnh thành đã chọn ? [{0}]", prov.NameOfProvince),
                    new MessageBoxButtonsConfig()
                    {
                        Yes = new MessageBoxButtonConfig
                        {
                            Text = "Xóa",
                            Handler = "App.direct.DoYes_DeleteProvinces();"
                        },
                        No = new MessageBoxButtonConfig
                        {
                            Text = "Hủy bỏ"
                        }
                    }).Show();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    [DirectMethod]
    public void DoYes_DeleteProvinces()
    {
        RowSelectionModel rsm = GridPanelProvince.SelectionModel.Primary as RowSelectionModel;
        using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
        {
            int provID = Int32.Parse(rsm.SelectedRow.RecordID);
            Province prov = db.Provinces.Single(p => p.ProvID == provID);
            List<District> listDistricts = prov.Districts.ToList<District>();
            foreach (var itemDis in listDistricts)
            {
                List<Commune> listComms = itemDis.Communes.ToList<Commune>();
                foreach (var itemComm in listComms)
                {
                    List<Organization> listOrgans = itemComm.Organizations.ToList<Organization>();
                    foreach (var itemOrgan in listOrgans)
                    {
                        List<Department> listDeparts = itemOrgan.Departments.ToList<Department>();
                        foreach (var itemDepart in listDeparts)
                        {
                            List<Employee> listEmps = itemDepart.Employees1.ToList<Employee>();
                            foreach (var itemEmp in listEmps)
                            {
                                //Xóa profile của Employee
                                List<Profily> listProfile = itemEmp.Profilies.ToList<Profily>();
                                foreach (var item in listProfile)
                                {
                                    db.Profilies.Remove(item);
                                }

                                //Xóa tất cả TranningForestings của Employee
                                List<TrainingFostering> trainList = itemEmp.TrainingFosterings.ToList<TrainingFostering>();
                                foreach (var item in trainList)
                                {
                                    db.TrainingFosterings.Remove(item);
                                }

                                //Xóa tất cả EducationsForEmps của employee
                                List<EducationsForEmp> eduList = itemEmp.EducationsForEmps.ToList<EducationsForEmp>();
                                foreach (var item in eduList)
                                {
                                    db.EducationsForEmps.Remove(item);
                                }

                                //Xóa tất cả FamilyRelationships của employee
                                List<FamilyRelationship> familyList = itemEmp.FamilyRelationships.ToList<FamilyRelationship>();
                                foreach (var item in familyList)
                                {
                                    db.FamilyRelationships.Remove(item);
                                }

                                //Xóa tất cả EmployeesSalaryLevel của employee
                                List<EmployeesSalaryLevel> salarylevalList = itemEmp.EmployeesSalaryLevels.ToList<EmployeesSalaryLevel>();
                                foreach (var item in salarylevalList)
                                {
                                    db.EmployeesSalaryLevels.Remove(item);
                                }
                                db.Employees.Remove(itemEmp);
                            }
                            db.Departments.Remove(itemDepart);
                        }
                        db.Organizations.Remove(itemOrgan);
                    }
                    db.Communes.Remove(itemComm);
                }
                db.Districts.Remove(itemDis);
            }
            db.Provinces.Remove(prov);
            db.SaveChanges();

            GridPanelProvince_DataLoad();
            ResetControls_FormViewInfor();
            X.Msg.Alert("Thông báo", "Xóa tỉnh thành thành công.").Show();
        }
    }

    private void ResetControls_WindowAdd()
    {
        lblwdAddProMes.Text = "";
        txtProname.Text = "";
        cbxWdAddStatus.Checked = false;
    }

    private void ResetControls_WindowUpdate()
    {
        lblWDUpdateProMes.Text = "";
        txtWDUpdateProName.Text = "";
        txtWDUpdateNewProname.Text = "";
        checkWDUpdateStatus.Checked = false;
    }

    private void ResetControls_FormViewInfor()
    {
        lblViewProName.Text = "";
        checkViewProStatus.Checked = false;
    }
}